#include <iostream>
#include <cstring>
using namespace std;

/*
	规律：
	    如果vf不是虚函数
		    此时四种情况究竟调用谁的vf，看赋值运算左边的指针类型即可
		如果vf是虚函数
		    此时四种情况究竟调用谁的vf，看赋值运算右边的指针类型即可
*/
class B
{
public:
	void vf()
	{
		cout<<"父类B里面的vf函数"<<endl;
	}
};

class D:public B
{
public:
	void vf()
	{
		cout<<"子类D里面的vf函数"<<endl;
	}
};


int main(int argc,char **argv)
{
	//定义父类和子类的对象，指针
	B b;
	B *pb;
	D d;
	D *pd;
	
	//第一组
	pb=&b;      //父类指针指向父类对象
	pb->vf();  
	pb=&d;      //父类指针指向子类对象
	pb->vf();
	
	//第二组
	pd=&d;          //子类指针指向子类对象
	pd->vf();
	pd=(D *)&b;     //子类指针指向父类对象
	pd->vf();
	return 0;	
}